// package com.peng.test.wconf;
//
// import com.peng.utils.JacksonUtil;
// import org.apache.commons.lang3.StringUtils;
// import org.checkerframework.checker.units.qual.K;
//
// import java.util.*;
// import java.util.function.Function;
//
// /**
//  * WconfBuilder
//  *
//  * @author: lupeng10
//  * @create: 2023-06-01 10:39
//  */
// public abstract class WconfBuilder<T> implements Function<String, WconfBuilder<T>> {
//
//     protected final String namespace;
//     protected final T defaultValue;
//
//     public WconfBuilder(String namespace, T defaultValue) {
//         this.namespace = namespace;
//         this.defaultValue = defaultValue;
//     }
//
//     public abstract T build();
//
//     @Override
//     public WconfBuilder<T> apply(String namespace) {
//         return null;
//     }
//
//     public <T2> WconfBuilder<T2> mapper(Function<T, T2> mapper) {
//         // return new WconfBuilder<>(namespace, );
//     }
//
//
//
//     /**
//      * 处理json类型的数据
//      */
//     static class JsonWconfBuilder<T> extends WconfBuilder<T>{
//
//         private final Class<T> tClass;
//
//         public JsonWconfBuilder(String namespace, T defaultValue, Class<T> tClass) {
//             super(namespace, defaultValue);
//             this.tClass = tClass;
//         }
//
//         @Override
//         public T build() {
//             return JacksonUtil.fromJson(namespace, tClass);
//         }
//     }
//
//     /**
//      * 反序列化json，转换成Map
//      */
//     static class JsonMapWconfBuilder<K, V, T extends Map<K, V>> extends WconfBuilder<T> {
//
//         private final Class<K> keyType;
//         private final Class<V> valueTyp;
//
//         public JsonMapWconfBuilder(String namespace, T defaultValue, Class<K> keyType, Class<V> valueTyp) {
//             super(namespace, defaultValue);
//             this.keyType = keyType;
//             this.valueTyp = valueTyp;
//         }
//
//         @Override
//         public T build() {
//             return JacksonUtil.ofJsonMap(namespace, HashMap.class, keyType, valueTyp);
//         }
//     }
//
//     /**
//      * 反序列化json，转换成集合，集合中的元素为泛型对象
//      */
//     static class JsonCollectionWconfBuildr<E, T extends Collection<E>> extends WconfBuilder<T> {
//
//         private final Class<E> itemType;
//
//         public JsonCollectionWconfBuildr(String namespace, T defaultValue, Class<E> itemType) {
//             super(namespace, defaultValue);
//             this.itemType = itemType;
//         }
//
//         @Override
//         public T build() {
//             return JacksonUtil.ofJsonCollection(namespace, ArrayList.class, itemType);
//         }
//     }
//
//     static class JsonSetMapWconfBuildr<K, V, T extends Map<K, Set<V>>> extends WconfBuilder<T> {
//
//         private final Class<K> keyType;
//         private final Class<V> subValueType;
//
//         public JsonSetMapWconfBuildr(String namespace, T defaultValue, Class<K> keyType, Class<V> subValueType) {
//             super(namespace, defaultValue);
//             this.keyType = keyType;
//             this.subValueType = subValueType;
//         }
//
//         @Override
//         public T build() {
//             return JacksonUtil.ofSetMap(namespace, HashMap.class, keyType, subValueType);
//         }
//     }
//
//
//
//
//
//     @FunctionalInterface
//     interface KeyParser<K> {
//         K apply(Object o);
//     }
//
//     @FunctionalInterface
//     interface ValueParser<V> {
//         V apply(Object o);
//     }
// }
